import pandas as pd
import re
import logging

# 说明
# 使用本程序，需要在同一目录下创建replace_data.csv文件
# 文件里面共有三列，第一列为文件名，第二列为检索字符串，第三列为替换字符串。
# 如果要替换多行文本，直接在csv文件中，两个双引号之间粘贴即可


# 设置日志文件路径和格式
log_path = "./replace_log.txt"
logging.basicConfig(filename=log_path, format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO)

# 读取CSV文件
csv_path = "./replace_data.csv"
# csv_path = "./replace_data_test.csv"
df = pd.read_csv(csv_path, sep=",", header=None, quotechar='"', skipinitialspace=True, encoding="utf-8")
print(f"读取替换数据：{df.head()}")
# 获取要替换的字符串和替换后的字符串
file_strings = df[0].tolist()
search_strings = df[1].tolist()
search_strings = [string.replace('\r\n', '\n') for string in search_strings]
replace_strings = df[2].tolist()
# print(file_strings)
# 获取代码文件的路径列表
# code_dir = "./test"
# code_files = glob.glob(os.path.join(code_dir, "*"))


def replace_string_in_file(file_path, search_str, replace_str):
    # 检查并强制类型转换参数
    file_path = str(file_path)
    # print(search_str)
    search_str = str(search_str)
    replace_str = str(replace_str)
    try:
        # 打开文件并读取内容
        print(f"正在打开文件： {file_path} ")
        with open(file_path, 'r',encoding = 'utf-8') as f:
            content = f.read()
        # print(f"文件内容{content}")

        # 替换字符串并获取替换后的内容和替换次数
        new_content, replace_count = re.subn(search_str, replace_str, content)
        if replace_count > 0:
                logging.info(f"在文件 {file_path} 中成功将字符串 '{search_str}' 替换为 '{replace_str}'")
        elif replace_count == 0:
        # 如果替换次数为0，则不写入文件
            print(f"没有搜到字符串{search_str}")
            return False

        # 将替换后的文本内容进行\r\n的替换
        new_content = [string.replace('\r\n', '\n') for string in new_content]
        # 将替换后的内容写回文件
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(new_content)
    except Exception as e:
        logging.error(f"在文件 {file_path} 中替换字符串时出错：{str(e)}")
    return True

def main():
    # 遍历代码文件并进行替换
    for i in range(len(file_strings)):
        # print(file_path)
        try:
            replace_string_in_file(file_strings[i],search_strings[i],replace_strings[i])
        except Exception as e:
            logging.error(f"在文件 {file_strings[i]} 中替换字符串时出错：{str(e)}")

if __name__ == '__main__':
    main()
